"""
@author: wy
@file: 并发编程.py
@time: 2025/1/7 14:36
"""
import time
#多进程多线程编程

#资源：计算资源
     #存储资源

#进程
#正在运行的程序，操作系统进行资源分配的最小单位

#线程
#运行在进程之上，操作系统进行调度的最小单位

#cpu时间片

#linux操作系统
#进程调度
#进程通信
#内存管理
#文件系统
#网络接口

         #多进程 vs  多线程
#切换开销         >
#创建销毁         >
#安全性          >
#代码调试         >

#python解释器
#  cpython
#  Jpython
#  Ironpython
#  pypy

##考点！！！
#GIL(全局解释器锁)
#每个线程在执行的过程中都需要先获取GIL，保证同一时刻同一个进程内只有一个线程可以执行代码

# GIL最基本的行为只有下面两个：
# 1. 当前执行的线程持有GIL
# 2. 当线程遇到io阻塞时，会释放GIL

#io密集型任务 -- 多线程
#计算密集型   --  多进程


#创建多进程
#linux  os.fork()
#     multiprocessing
#     threading

from multiprocessing import Process

def task(i):
    print(f"start....{i}")
    time.sleep(1)
    print(f"end....{i}")

if __name__ == "__main__":   #当前模块直接运行的时候执行
    p_lst = []
    for i in range(3):
        #target  做什么事情
        #args    传递什么参数   元组类型
        p = Process(target=task, args=(i,)) #创建进程对象
        p.start()  #开启进程
        p_lst.append(p)
    for p in p_lst:
        p.join()     #阻塞当前环境上下文，直到为p的进程结束
    print("结束程序")

